<html>
    <head>
        <title>对模块的全局功能进行分组</title>
    </head>
    <body>
        <script>
        
             /*
                    五、对模块的全局功能进行分组

                                对模块的全局功能进行分组以允许最终应用程序开发人员轻松发现 和 配置功能是很常见的。

                                以下示例显示了如何对模块的功能进行分组。

                                假设我们已经为Ecommerce模块的Subscription功能定义了一个全局特性：

                                            [GlobalFeatureName("Ecommerce.Subscription")]
                                            public class SubscriptionFeature : GlobalFeature
                                            {
                                                public SubscriptionFeature(GlobalModuleFeatures module)
                                                    : base(module)
                                                {
                                                }
                                            }

                                你可以在模块中定义任何数量的全局功能。然后定义一个类将这些功能组合在一起：

                                            public class GlobalEcommerceFeatures : GlobalModuleFeatures // 模块功能分组基类
                                            {
                                                public const string ModuleName = "Ecommerce"; // 模块名称

                                                public SubscriptionFeature Subscription => GetFeature<SubscriptionFeature>();
                                                
                                                public GlobalEcommerceFeatures(GlobalFeatureManager featureManager)
                                                    : base(featureManager)
                                                {
                                                    AddFeature(new SubscriptionFeature(this));
                                                }
                                            }
                                            
                                最后，你可以在GlobalModuleFeaturesDictionary上创建一个扩展方法：

                                            public static class GlobalModuleFeaturesDictionaryEcommerceExtensions
                                            {
                                                public static GlobalEcommerceFeatures Ecommerce(
                                                    this GlobalModuleFeaturesDictionary modules)
                                                {
                                                    return modules.GetOrAdd(
                                                        GlobalEcommerceFeatures.ModuleName,
                                                        _ => new GlobalEcommerceFeatures(modules.FeatureManager)
                                                    ) as GlobalEcommerceFeatures;
                                            }

                                然后GlobalFeatureManager.Instance.Modules.Ecommerce()可用于访问模块的全局功能。示例用法：
                                                
                                            GlobalFeatureManager.Instance.Modules.Ecommerce().Subscription.Enable();
                                            GlobalFeatureManager.Instance.Modules.Ecommerce().EnableAll();
                */
        </script>
    </body>
</html>